Zruseni komponent komponentou

Otázka od: Jiri Cincura

15. 7. 2004 19:38

Ahoj,
  mam na formulari (napr.) 3 Buttony. Po kliknuti na nejaky z nich zavolam
proceduru, ktera vsechny komponenty znici.
Asi takto:

procedure ButtonClick(Sender: TObject);
begin
  ZnicVse; //uvolni vsechny komponenty
end;


Coz samozrejme vyvola chybu, pac se znici i ten Button a neni se kam vratit.

Ptam se, je mozne nejak udelat, aby toto slo?

Zatim to resim tak, ze mam thread, kde mam jen:
procedure Execute;
begin
  Synchronize(ZnicVse);
end;

ale pripada mi to dost divne.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net


Odpovedá: tondrej@t-online.de

15. 7. 2004 20:03

Zdar,

> mam na formulari (napr.) 3 Buttony. Po kliknuti na nejaky z nich zavolam
> proceduru, ktera vsechny komponenty znici.
> Asi takto:
>
> procedure ButtonClick(Sender: TObject);
> begin
> ZnicVse; //uvolni vsechny komponenty
> end;
>
> Coz samozrejme vyvola chybu, pac se znici i ten Button a neni se kam vratit.
>
> Ptam se, je mozne nejak udelat, aby toto slo?

Je to problem, pretoze metoda Click je volana v kontexte spracovania spravy.
Da sa to tiez riesit tak, ze z OnClick si posles na formular vlastnu
spravu (WM_USER + n) a az v jej spracovani potom zavolas metodu ZnicVse.

HTH
TOndrej


Odpovedá: Jiri Cincura

15. 7. 2004 21:03

tondrej@t-online.de wrote:
> Je to problem, pretoze metoda Click je volana v kontexte spracovania
> spravy.
> Da sa to tiez riesit tak, ze z OnClick si posles na formular vlastnu
> spravu (WM_USER + n) a az v jej spracovani potom zavolas metodu
> ZnicVse.

No to me taky napadlo. Ale preci jen jsem doufal v nejake "systemovejsi"
reseni.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Milan Tomes

16. 7. 2004 6:25

Mam takovy pocit, ze pokud se podivas do archivu, tak toto reseni
doporucoval i sam pan velky v soucasnosti znamy pod prezdivkou Petr Vones
 

S pozdravem

Milan Tomes

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Jiri Cincura
> Sent: Thursday, July 15, 2004 9:49 PM
>
> tondrej@t-online.de wrote:
> > Je to problem, pretoze metoda Click je volana v kontexte spracovania
> > spravy.
> > Da sa to tiez riesit tak, ze z OnClick si posles na formular vlastnu
> > spravu (WM_USER + n) a az v jej spracovani potom zavolas metodu
> > ZnicVse.
>
> No to me taky napadlo. Ale preci jen jsem doufal v nejake "systemovejsi"
> reseni.


Odpovedá: Jiri Cincura

16. 7. 2004 9:57

Milan Tomes wrote:
> Mam takovy pocit, ze pokud se podivas do archivu, tak toto reseni
> doporucoval i sam pan velky v soucasnosti znamy pod prezdivkou Petr
> Vones  

Kdyz problem je v tom, ze ta app je CLX. Tam se to reseni pres side thread
zda lepsi.  

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net


Odpovedá: Petr Fejfar

16. 7. 2004 10:58

Jiri Cincura wrote:

> Kdyz problem je v tom, ze ta app je CLX. Tam se to reseni pres side
> thread zda lepsi.  

Jestli se nepletu, tak jsi hledal nejake "systemovejsi" reseni
a takovym resenim je pozadat vlastnika instance, aby ji zrusil
a ne se mu plest do kompetenci nejakym threadem  

pf


Odpovedá: Pavel Poles

16. 7. 2004 11:06

> Kdyz problem je v tom, ze ta app je CLX. Tam se to reseni pres side thread
> zda lepsi.  

v CLX to jde treba takhle:

procedure TMyComponent.Release;
begin
    if not (csDestroying in ComponentState) then
      QApplication_PostEvent( Application.Handle, QCustomEvent_create(
QEventType_CMRelease, Self ));
end;

Pavel Poles


Odpovedá: Jiri Cincura

16. 7. 2004 20:49

Pavel Poles wrote:
>> Kdyz problem je v tom, ze ta app je CLX. Tam se to reseni pres side
>> thread zda lepsi.  
>
> v CLX to jde treba takhle:
>
> procedure TMyComponent.Release;
> begin
> if not (csDestroying in ComponentState) then
> QApplication_PostEvent( Application.Handle, QCustomEvent_create(
> QEventType_CMRelease, Self ));
> end;

Tak tohle je naprosto skvele! Jeste pro nekoho dodam, ze do uses dat Qt.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net